﻿// Copyright (c)  MOKEYISH. All rights reserved.
// Licensed under the MIT License, See License.txt in the project root for license information.

using NSQL.Expressions.Functions;

namespace NSQL.Expressions
{
    public interface IExpressionVisitor<out T> : IFunctionVisitor<T>
    {
        T Visit(IComparisonExpression comparisonExpression);

        T Visit(IColumnExpression columnExpression);

        T Visit(IConstantExpression constantExpression);

        T Visit(IInExpression inExpression);

        T Visit(INotInExpression notInExpression);

        T Visit(IGroupExpression groupExpression);

        T Visit(IBetweenExpression betweenExpression);

        T Visit(INotExpression notExpression);

        T Visit(INullExpression nullExpression);

        T Visit(INotNullExpression notNullExpression);

        T Visit(IMatchExpression matchExpression);
        T Visit(ISimpleMatchExpression simpleMatchExpression);

        T Visit(IArithmeticExpression arithmeticExpression);

        T Visit(IUnaryExpression unaryExpression);

        T Visit(ISystemVariable systemVariable);


        T Visit(ILikeExpression likeExpression);


        T Visit(IExpressions inElements);

        T Visit(IExistsExpression existsExpression);

        IFunctionVisitor<T> FunctionVisitor { get; }
    }
}